import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.SwingConstants;
import javax.swing.JList;
import java.awt.List;
import java.util.HashMap;
/**
 * Fenêtre de consultation d'un ouvrage
 * Code du JFrame généré par Window Builder/Swing Designer.
 * @author IUT,  A.Culet 
 * @version 1.0
 */

public class VueConsultPerdiodique extends Vue {

	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private JTextField textFieldTitre;	
	private JButton buttonRech;
	private JButton buttonAnnuler;
	private JButton buttonFermer;
	private JButton buttonAfficher;
	private List listPeriodique;
	private List listParution;
	private List listArticle;
	private JLabel lblParution;
	private Periodique _periodique;
	private Parution _parution;
	private JLabel LabelIssn;
	private JTextField textFieldISSN;
	
	
	
	/**
	 * Create the frame.
	 */
	public VueConsultPerdiodique(Controleur controleur) {
		super(controleur);
		setTitle("Informations sur un periodique");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
		setBounds(100, 100, 412, 473);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblNewLabel = new JLabel("Periodique :");
		lblNewLabel.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel.setBounds(10, 11, 79, 15);
		contentPane.add(lblNewLabel);
		
		JLabel LabelTitre = new JLabel("Titre");
		LabelTitre.setHorizontalAlignment(SwingConstants.RIGHT);
		LabelTitre.setBounds(44, 148, 43, 15);
		contentPane.add(LabelTitre);
		
		textFieldTitre = new JTextField();
		textFieldTitre.setEditable(false);
		textFieldTitre.setBounds(112, 145, 214, 19);
		contentPane.add(textFieldTitre);
		textFieldTitre.setColumns(10);
		
		buttonAnnuler = new JButton("Annuler");
		buttonAnnuler.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			getControleur().fermerVue(VueConsultPerdiodique.this);}
		});
		buttonAnnuler.setBounds(255, 98, 107, 25);
		contentPane.add(buttonAnnuler);
		
		buttonRech = new JButton("Rechercher");
		buttonRech.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				_periodique = getControleur().periodiqueSelec(listPeriodique);
				if(_periodique != null){
				affichage();
				setEtat(Vue.inter1);
				}
				else{
					Message dialog = new Message("Selectionner un periodique");
					dialog.setVisible(true);
				}
				}
		});
		buttonRech.setBounds(255, 44, 107, 25);
		contentPane.add(buttonRech);
		
		buttonFermer = new JButton("Fermer");
		buttonFermer.setEnabled(false);
		buttonFermer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			getControleur().fermerVue(VueConsultPerdiodique.this);}
		});
		buttonFermer.setBounds(279, 399, 107, 25);
		contentPane.add(buttonFermer);
		
		lblParution = new JLabel("Parution :");
		lblParution.setBounds(10, 234, 61, 14);
		contentPane.add(lblParution);
		
		listPeriodique = new List();
		listPeriodique.setBounds(112, 10, 122, 113);
		contentPane.add(listPeriodique);		
		listPeriodique();
		
		listParution = new List();
		listParution.setBounds(112, 234, 122, 102);
		contentPane.add(listParution);
		
		
		buttonAfficher = new JButton("Afficher");
		buttonAfficher.setBounds(112, 342, 86, 23);
		contentPane.add(buttonAfficher);
		buttonAfficher.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			_parution = getControleur().parutionSelec(listParution, _periodique);
			if(_parution != null){
				listArticle();
			}
			else{
					Message dialog = new Message("Selectionner une parution");
					dialog.setVisible(true);
				}			
			}});
		
		LabelIssn = new JLabel("ISSN");
		LabelIssn.setBounds(44, 189, 46, 14);
		contentPane.add(LabelIssn);
		
		textFieldISSN = new JTextField();
		textFieldISSN.setEditable(false);
		textFieldISSN.setBounds(112, 186, 86, 20);
		contentPane.add(textFieldISSN);
		textFieldISSN.setColumns(10);
		
		listArticle = new List();
		listArticle.setBounds(255, 234, 115, 113);
		contentPane.add(listArticle);
		
		}
	
	public void listPeriodique() {
		HashMap<Integer, Periodique> _periodiques;
		_periodiques = getControleur().getPeriodiques();
		for (int i = 1; i <= _periodiques.size(); i++) {
			listPeriodique.add(_periodiques.get(i).getTitre());
		}
		if(_periodiques.size() == 0){
			listPeriodique.add("Aucun periodique encore enregistree");
			buttonRech.setEnabled(false);
		}
			
	}

	public void listParution() {
		HashMap<Integer, Parution> _parutions;
		listParution.clear();
		if (_periodique != null) {
			_parutions = _periodique.getEnsParution();

			for (int i = 1; i <= _parutions.size(); i++) {
				listParution.add("N°"+(_parutions.get(i).getNum()).toString());
			}
		}
		else{
			listParution.add("Aucune parution encore enregistree");
			buttonAfficher.setEnabled(false);
		}
	}
	
	public void listArticle(){
		listArticle.clear();
		if(_parution != null){
			HashMap<Integer,Article> _articles;
			Article art;
			_articles = _parution.getEnsArticle();
			for(int i=1;i<=_articles.size();i++){
				art = _parution.getArticle(i);
				listArticle.add(art.getTitre()+" page"+art.getPageDebut());
			}		
		}		
	}
		
	public void affichage(){
		textFieldTitre.setText(_periodique.getNom());
		textFieldISSN.setText(_periodique.getIssn());
		listParution();
	}
	/**
	 * définition des états de la fenêtre, cad des régions actives selon l'état
	 */
	public void setEtat (int etat){
		switch (etat) {
		case initiale: {			
			buttonAnnuler.setEnabled(true);
			buttonFermer.setEnabled(false);
			buttonAfficher.setEnabled(false);
			break;
			}
		case inter1: {
			buttonRech.setEnabled(false);
			buttonAnnuler.setEnabled(false);
			buttonFermer.setEnabled(true);
			buttonAfficher.setEnabled(true);			
			break;
			}
		
		}
	}
}
